home *** CD-ROM | disk | FTP | other *** search
/ PC User 2003 September / Australian PC User - September 2003 (CD1).iso / magstuff / web / files / dwmx61.exe / Disk1 / data1.cab / Configuration_En / ServerModels / UD4-ColdFusion / dwscriptsServerImpl.js < prev   
Encoding:
JavaScript  |  2002-11-25  |  12.0 KB  |  515 lines

  1. // Copyright 2002 Macromedia, Inc. All rights reserved.
  2.  
  3. // *************** GLOBALS VARS *****************
  4.  
  5. // ***************** LOCAL FUNCTIONS  ******************
  6.  
  7. //--------------------------------------------------------------------
  8. // FUNCTION:
  9. //   encodeDynamicExpression
  10. //
  11. // DESCRIPTION:
  12. //   This function prepares a dynamic expression for insertion onto
  13. //   the page.  It is assumed that this expression will be used
  14. //   within a larger dynamic statement, therefore all server markup
  15. //   is stripped.
  16. //
  17. // ARGUMENTS:
  18. //   expression - string - the dyanmic expression to encode
  19. //
  20. // RETURNS:
  21. //   string
  22. //--------------------------------------------------------------------
  23.  
  24. function encodeDynamicExpression(expression)
  25. {
  26.   var retVal = "";
  27.   expression = expression.toString();
  28.  
  29.   if (hasServerMarkup(expression))
  30.   {
  31.     retVal = trimServerMarkup(expression);
  32.   }
  33.   else
  34.   {
  35.     var parameters = expression.match(/(true|false|[-]?\d+[\.]?\d*)/i);
  36.     if (parameters && parameters[0].length == expression.length) // matches, return exact
  37.     {
  38.       retVal = expression;
  39.     }
  40.     else
  41.     {
  42.       if (!dwscripts.isQuoted(expression))
  43.       {
  44.         retVal = "\"" + dwscripts.escQuotes(expression) + "\"";
  45.       }
  46.       else
  47.       {
  48.         retVal = expression;
  49.       }
  50.     }
  51.   }
  52.  
  53.   return retVal;
  54. }
  55.  
  56.  
  57. //--------------------------------------------------------------------
  58. // FUNCTION:
  59. //   decodeDynamicExpression
  60. //
  61. // DESCRIPTION:
  62. //   This function prepares a dynamic expression for display within
  63. //   a dialog box.  Quotes are removed,a nd server markup is re-added.
  64. //
  65. // ARGUMENTS:
  66. //   expression - string - the dynamic expression to prepare for display
  67. //
  68. // RETURNS:
  69. //   string
  70. //--------------------------------------------------------------------
  71.  
  72. function decodeDynamicExpression(expression)
  73. {
  74.   var retVal = "";
  75.  
  76.   expression = dwscripts.trim(expression.toString());
  77.   var unquoted = dwscripts.trimQuotes(expression);
  78.  
  79.   var parameters = unquoted.match(/(true|false|[-]?\d+[\.]?\d*)/i);
  80.   if (parameters && parameters[0].length == unquoted.length) // matches, return exact
  81.   {
  82.     retVal = expression;
  83.   }
  84.   else
  85.   {
  86.     if (dwscripts.isQuoted(expression))
  87.     {
  88.       retVal = dwscripts.unescQuotes(unquoted);
  89.     }
  90.     else if (!(   expression.charAt(0) == "#"
  91.                && expression.charAt(expression.length-1) == "#"
  92.               )
  93.             )
  94.     {
  95.       retVal = "#" + expression +"#";  // no need to add cfoutput tags
  96.     }
  97.     else
  98.     {
  99.       retVal = expression;
  100.     }
  101.   }
  102.  
  103.   return retVal;
  104. }
  105.  
  106.  
  107. //--------------------------------------------------------------------
  108. // FUNCTION:
  109. //   hasServerMarkup
  110. //
  111. // DESCRIPTION:
  112. //   This function returns true if the given expression contains
  113. //   server markup.
  114. //
  115. // ARGUMENTS:
  116. //   expression - string - the expression to test for server markup
  117. //
  118. // RETURNS:
  119. //   boolean
  120. //--------------------------------------------------------------------
  121.  
  122. function hasServerMarkup(expression)
  123. {
  124.   var retVal = false;
  125.  
  126.   expression = expression.toString();
  127.  
  128.   var exp1 = /<cfoutput[^>]*>/gi;
  129.   var exp2 = /<\/cfoutput>/gi;
  130.   if ((expression.search(exp1) != -1 && expression.search(exp2) != -1))
  131.   {
  132.     retVal = true;
  133.   }
  134.  
  135.   if (!retVal)
  136.   {
  137.     // search for the starting and closing pound signs
  138.     //  need to handle pound signs escaped with double pounds
  139.  
  140.     var beginindex = expression.indexOf("#");
  141.     while (beginindex != -1)
  142.     {
  143.       if (beginindex+1 >= expression.length || expression.charAt(beginindex+1) != "#")
  144.       {
  145.         break;
  146.       }
  147.       beginindex = expression.indexOf("#", beginindex+2);
  148.     }
  149.     if (beginindex != -1)
  150.     {
  151.       var endindex = expression.indexOf("#", beginindex+1);
  152.       while (endindex != -1)
  153.       {
  154.         if (endindex+1 >= expression.length || expression.charAt(endindex+1) != "#")
  155.         {
  156.           break;
  157.         }
  158.         endindex = expression.indexOf("#", endindex+2);
  159.       }
  160.  
  161.       if (beginindex != -1 && endindex != -1)
  162.       {
  163.         retVal = true;
  164.       }
  165.     }
  166.   }
  167.  
  168.   return retVal;
  169. }
  170.  
  171.  
  172. //--------------------------------------------------------------------
  173. // FUNCTION:
  174. //   trimServerMarkup
  175. //
  176. // DESCRIPTION:
  177. //   This function returns the given expression with any server markup
  178. //   removed.
  179. //
  180. // ARGUMENTS:
  181. //   expression - string - the expression to remove server markup from
  182. //
  183. // RETURNS:
  184. //   string
  185. //--------------------------------------------------------------------
  186.  
  187. function trimServerMarkup(expression)
  188. {
  189.   var retVal = expression.toString();
  190.  
  191.   var exp1 = /<cfoutput[^>]*>/gi;
  192.   var exp2 = /<\/cfoutput[^>]*>/gi;
  193.  
  194.   retVal = retVal.replace(exp1,"");
  195.   retVal = retVal.replace(exp2,"");
  196.  
  197.   // search for the starting and closing pound signs
  198.   //  need to handle pound signs escaped with double pounds
  199.  
  200.   var beginindex = retVal.indexOf("#");
  201.   while (beginindex != -1)
  202.   {
  203.     if (beginindex+1 >= retVal.length || retVal.charAt(beginindex+1) != "#")
  204.     {
  205.       break;
  206.     }
  207.     beginindex = retVal.indexOf("#", beginindex+2);
  208.   }
  209.   if (beginindex != -1)
  210.   {
  211.     var endindex = retVal.indexOf("#", beginindex+1);
  212.     while (endindex != -1)
  213.     {
  214.       if (endindex+1 >= retVal.length || retVal.charAt(endindex+1) != "#")
  215.       {
  216.         break;
  217.       }
  218.       endindex = retVal.indexOf("#", endindex+2);
  219.     }
  220.  
  221.     if (beginindex != -1 && endindex != -1)
  222.     {
  223.       retVal = retVal.substring(beginindex,endindex+1);
  224.     }
  225.   }
  226.  
  227.   retVal = dwscripts.trim(retVal);
  228.  
  229.   return retVal;
  230. }
  231.  
  232.  
  233. //--------------------------------------------------------------------
  234. // FUNCTION:
  235. //   inspectDynamicDataRef
  236. //
  237. // DESCRIPTION:
  238. //
  239. // ARGUMENTS:
  240. //
  241. // RETURNS:
  242. //--------------------------------------------------------------------
  243.  
  244. function inspectDynamicDataRef(expression)
  245. {
  246.   var retArray = new Array()
  247.  
  248.   // These RE's are also used in the Translator...maybe we should have one
  249.   //.js file and include it.
  250.  
  251.   var returnRE = /(<cfoutput>\s*#(\w+)__(RETURN_VALUE)#\s*<\/cfoutput>)/gi
  252.   var outParamRE = /(<cfoutput>\s*#(\w+)__(\w+)#\s*<\/cfoutput>)/gi
  253.   var cfQueryRE = /(<cfoutput>\s*#(\w+)\.(\w+)#\s*<\/cfoutput>)/gi
  254.  
  255.  
  256.   //I should use a for loop to go through the RE's
  257.  
  258.   var pos = expression.search(returnRE)
  259.   if (pos == -1)
  260.   {
  261.     pos = expression.search(outParamRE)
  262.     if (pos == -1)
  263.     {
  264.       pos = expression.search(cfQueryRE)
  265.     }
  266.   }
  267.  
  268.   if (pos != -1)
  269.   {
  270.     retArray[0] = RegExp.$2
  271.     retArray[1] = RegExp.$3
  272.   }
  273.   else
  274.   {
  275.     retArray[0] = ""
  276.     retArray[1] = ""
  277.   }
  278.  
  279.   return retArray
  280. }
  281.  
  282.  
  283.  
  284.  
  285. ////////////////////////////////////////////////////////////////////////////////
  286. //These are some helper functions used by SSI infrastructure and not
  287. //part of the Server API.
  288. ////////////////////////////////////////////////////////////////////////////////
  289.  
  290.  
  291. //--------------------------------------------------------------------
  292. // FUNCTION:
  293. //   getRecordsetNames
  294. //
  295. // DESCRIPTION:
  296. //   Returns a list of all recordset names on the page.
  297. //
  298. // ARGUMENTS:
  299. //   dontIncludeStoredProcRS - boolean (optional). 'true' if should not
  300. //     include recordsets returned from stored procedures. defaults to
  301. //     'false'.
  302. //
  303. // RETURNS:
  304. //   array of strings
  305. //--------------------------------------------------------------------
  306.  
  307. function getRecordsetNames(dontIncludeStoredProcRS)
  308. {
  309.   if (!dontIncludeStoredProcRS) dontIncludeStoredProcRS = false;
  310.  
  311.   var nameList = new Array()
  312.   var currentdom = dreamweaver.getDocumentDOM()
  313.  
  314.   var nodes = currentdom.getElementsByTagName("CFQUERY")
  315.  
  316.   for (var i = 0; i < nodes.length; i++)
  317.   {
  318.     var node = nodes[i]
  319.     if (node.getAttribute("NAME") != null)
  320.     {
  321.       nameList.push(node.getAttribute("NAME"))
  322.     }
  323.   }
  324.  
  325.   if (!dontIncludeStoredProcRS)
  326.   {
  327.     // Get list of resultsets returned by stored procs
  328.  
  329.     var nodes = currentdom.getElementsByTagName("CFPROCRESULT")
  330.  
  331.     for (var i = 0; i < nodes.length; i++)
  332.     {
  333.       var node = nodes[i]
  334.       nameList.push(node.getAttribute("NAME"))
  335.     }
  336.   }
  337.  
  338.   return nameList
  339. }
  340.  
  341.  
  342. //--------------------------------------------------------------------
  343. // FUNCTION:
  344. //   getRepeatedRegionNames
  345. //
  346. // DESCRIPTION:
  347. //   Returns a list of all repeated region names on the page.
  348. //
  349. // ARGUMENTS:
  350. //   None
  351. //
  352. // RETURNS:
  353. //   array of strings
  354. //--------------------------------------------------------------------
  355.  
  356. function getRepeatedRegionNames()
  357. {
  358.   var nameList = new Array();
  359.   var currentdom = dreamweaver.getDocumentDOM();
  360.  
  361.   if (currentdom)
  362.   {
  363.     var nodes = currentdom.getElementsByTagName("MM_REPEATEDREGION");
  364.     for (var index =0 ; index < nodes.length ; index++)
  365.     {
  366.       var node = nodes.item(index);
  367.       if (node)
  368.       {
  369.         nameList.push(node.getAttribute("NAME"));
  370.       }
  371.     }
  372.   }
  373.   return nameList;
  374. }
  375.  
  376.  
  377. //--------------------------------------------------------------------
  378. // FUNCTION:
  379. //   findSourceNode
  380. //
  381. // DESCRIPTION:
  382. //   Returns a data source name by name.
  383. //
  384. // ARGUMENTS:
  385. //   elementName - string - the name of the data source
  386. //
  387. // RETURNS:
  388. //   DOM node pointer
  389. //--------------------------------------------------------------------
  390.  
  391. function findSourceNode(elementName)
  392. {
  393.   var foundnode = null;
  394.   var currentdom = dreamweaver.getDocumentDOM();
  395.  
  396.   if (currentdom)
  397.   {
  398.     var nodes = currentdom.getElementsByTagName("CFQUERY");
  399.     for (var index =0 ; index < nodes.length ; index++)
  400.     {
  401.       var node = nodes.item(index);
  402.       if (node)
  403.       {
  404.         if(node.getAttribute("NAME") == elementName)
  405.         {
  406.           foundnode = node;
  407.         }
  408.       }
  409.     }
  410.  
  411.     if (!foundnode)
  412.     {
  413.       var nodes = currentdom.getElementsByTagName("CFSTOREDPROC")
  414.       for (var i = 0; i < nodes.length; i++)
  415.       {
  416.         var node = nodes[i]
  417.         if(GetSPName(node) == elementName)
  418.         {
  419.           foundnode = node;
  420.         }
  421.       }
  422.     }
  423.  
  424.     if (!foundnode)
  425.     {
  426.       var nodes = currentdom.getElementsByTagName("CFPROCRESULT");
  427.       for (var index =0 ; index < nodes.length ; index++)
  428.       {
  429.         var node = nodes.item(index);
  430.         if (node)
  431.         {
  432.           if(node.getAttribute("NAME") == elementName)
  433.           {
  434.             foundnode = node;
  435.           }
  436.         }
  437.       }
  438.     }
  439.   }
  440.  
  441.   return foundnode;
  442. }
  443.  
  444.  
  445. //--------------------------------------------------------------------
  446. // FUNCTION:
  447. //   GetSPName
  448. //
  449. // DESCRIPTION:
  450. //   Returns the Stored Procedure name from a DOM node
  451. //
  452. // ARGUMENTS:
  453. //   node - object - a DOM node pointer
  454. //
  455. // RETURNS:
  456. //   string
  457. //--------------------------------------------------------------------
  458.  
  459. function GetSPName(node)
  460. {
  461.   var retVal = "mmerror"
  462.  
  463.   var inner = node.innerHTML
  464.   var re = /<!---\s*mm_procname\s*=\s*"(\w+)"/i; // --> close html comment to fix MSDev color coding
  465.  
  466.   if (inner.search(re) != -1)
  467.   {
  468.     retVal = RegExp.$1
  469.   }
  470.  
  471.   return retVal
  472. }
  473.  
  474.  
  475. //--------------------------------------------------------------------
  476. // FUNCTION:
  477. //   getColumnNames
  478. //
  479. // DESCRIPTION:
  480. //   Returns the column names for the given recordset.
  481. //   If rs is not specified the column names for the first recordset
  482. //   are returned.
  483. //
  484. // ARGUMENTS:
  485. //   rs - string - optional - the name of a data source
  486. //
  487. // RETURNS:
  488. //   array of strings
  489. //--------------------------------------------------------------------
  490.  
  491. function getColumnNames(rs)
  492. {
  493.   var rsDOM, nameList = new Array();
  494.  
  495.   dataSourceNode = findSourceNode(rs);
  496.  
  497.   if (dataSourceNode && dataSourceNode.tagName == "CFQUERY")
  498.   {
  499.     rsDOM = dreamweaver.getDocumentDOM(dreamweaver.getConfigurationPath() + "/DataSources/UD4-ColdFusion/Recordset.htm");
  500.   }
  501.   else if (dataSourceNode && dataSourceNode.tagName == "CFPROCRESULT")
  502.   {
  503.     rsDOM = dreamweaver.getDocumentDOM(dreamweaver.getConfigurationPath() + "/DataSources/UD4-ColdFusion/CFSTOREDPROC.htm");
  504.   }
  505.  
  506.   if (rsDOM)
  507.   {
  508.     nameList = rsDOM.parentWindow.generateDynamicSourceBindings(rs);
  509.   }
  510.  
  511.   return nameList;
  512. }
  513.  
  514.  
  515.